grammar Tcsql;

@header {
package org.hsieh.sqleditor.antlr;
}

@lexer::header {
package org.hsieh.sqleditor.antlr;
}

stat
  :
  KEYWORDS field_list+ ';' (NEWLINE)*
  ;

field_list
  :
  '*'
  ;

//SQL Keywords is case insensitivity

FROM
  :
  F R O M
  ;

KEYWORDS
  :
  A L E R T
  | S E L E C T
  | D E L E T E
  ;
/*
ID  :	('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

**/


INT
  :
  '0'..'9'+
  ;

NEWLINE
  :
  '\r'? '\n'
  ;

SL_COMMENT
  :
  (
    '--'
    | '#'
  )
  ~(
    '\n'
    | '\r'
   )*
  '\r'? '\n' 
    {
     $channel = HIDDEN;
    }
  ;

ML_COMMENT
  :
  '/*' (options {greedy=false;}: .)* '*/' 
    {
     $channel = HIDDEN;
    }
  ;

WS
  :
  (
    ' '
    | '\t'
    | '\r'
    | '\n'
  )
  
    {
     $channel = HIDDEN;
    }
  ;

CHAR
  :
  '\''
  (
    ESC_SEQ
    |
    ~(
      '\''
      | '\\'
     )
  )
  '\''
  ;

fragment
HEX_DIGIT
  :
  (
    '0'..'9'
    | 'a'..'f'
    | 'A'..'F'
  )
  ;

fragment
ESC_SEQ
  :
  '\\'
  (
    'b'
    | 't'
    | 'n'
    | 'f'
    | 'r'
    | '\"'
    | '\''
    | '\\'
  )
  | UNICODE_ESC
  | OCTAL_ESC
  ;

fragment
OCTAL_ESC
  :
  '\\' ('0'..'3') ('0'..'7') ('0'..'7')
  | '\\' ('0'..'7') ('0'..'7')
  | '\\' ('0'..'7')
  ;

fragment
UNICODE_ESC
  :
  '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
  ;

fragment
A
  :
  (
    'a'
    | 'A'
  )
  ;

fragment
B
  :
  (
    'b'
    | 'B'
  )
  ;

fragment
C
  :
  (
    'c'
    | 'C'
  )
  ;

fragment
D
  :
  (
    'd'
    | 'D'
  )
  ;

fragment
E
  :
  (
    'e'
    | 'E'
  )
  ;

fragment
F
  :
  (
    'f'
    | 'F'
  )
  ;

fragment
G
  :
  (
    'g'
    | 'G'
  )
  ;

fragment
H
  :
  (
    'h'
    | 'H'
  )
  ;

fragment
I
  :
  (
    'i'
    | 'I'
  )
  ;

fragment
J
  :
  (
    'j'
    | 'J'
  )
  ;

fragment
K
  :
  (
    'k'
    | 'K'
  )
  ;

fragment
L
  :
  (
    'l'
    | 'L'
  )
  ;

fragment
M
  :
  (
    'm'
    | 'M'
  )
  ;

fragment
N
  :
  (
    'n'
    | 'N'
  )
  ;

fragment
O
  :
  (
    'o'
    | 'O'
  )
  ;

fragment
P
  :
  (
    'p'
    | 'P'
  )
  ;

fragment
Q
  :
  (
    'q'
    | 'Q'
  )
  ;

fragment
R
  :
  (
    'r'
    | 'R'
  )
  ;

fragment
S
  :
  (
    's'
    | 'S'
  )
  ;

fragment
T
  :
  (
    't'
    | 'T'
  )
  ;

fragment
U
  :
  (
    'u'
    | 'U'
  )
  ;

fragment
V
  :
  (
    'v'
    | 'V'
  )
  ;

fragment
W
  :
  (
    'w'
    | 'W'
  )
  ;

fragment
X
  :
  (
    'x'
    | 'X'
  )
  ;

fragment
Y
  :
  (
    'y'
    | 'Y'
  )
  ;

fragment
Z
  :
  (
    'z'
    | 'Z'
  )
  ;
